前言
很久以前,我就已经萌生了制作微光模型的想法。我的设想十分美好:自己设计绘制三视图,根据三视图建模,再导出模型 3D 打印头骨自制兽装。这其中的每一步要做好都不容易,更何况我都曾完全没有涉足。然而现在看来,我确实踏踏实实一步步做出来了,这不能不说实在是一件值得骄傲的事情。
其实早在今年 4 月 30 号,我的生日,我已经将微光模型的第一版做了出来。不知出于何种原因,我并没有将它分享出来。也许是我觉得他还不够完美。之后我继续将模型导出为 VRChat avatar 和 vTuber 形象。到这一步,我决定将模型完全完善到满意再分享。但是之后,由于临近期末周,以及朋友的一些玩笑话,我暂时搁置了模型打磨,并将重心转移到制作兽装上。
现在,兽装已经做好。然而我却不再有足够的耐心和时间来完善模型,甚至没能为他加一件披风。前几日《黑神话悟空》发售,我十分喜爱这部游戏,尤其喜欢创始人的一段话:走上西游路,比取到真经更重要。我知道,我经历了很多事情,它们中的大部分并没有达到完美。我并不想成为一个完美主义者。我更希望我的努力、我的成就能被大家看到。“越是贪图圆满,越是搜不干净。”
至少,权当做个学习笔记,万一之后想继续完善模型,可以参考这篇文章。我在这里会将主要步骤描述清楚,并尽可能通俗易懂地讲解每个部分的作用和原理,加上一点我遇到的问题和解决方法。结合具体操作的视频教程,相信完全不会的新手也可以做出和我一样的效果。
准备工作
Blender
大概是去年,我最早开始盘算学习建模的时候,在网上看到许多关于选择软件的建议。一些论调认为现在的主流工作流还是 Maya 等传统软件,Blender 与主流工作流衔接不好。然而,Blender 开源免费、轻量、综合、简单、社区活跃、插件丰富,对于个人创作者来说十分合适。对于我来说,我并不想之后去游戏公司给别人打工,Blender 无疑成了最好的选择。并且就在我用的这段时间里,Blender 更新了许多版本,发展潜力巨大。
不同版本 Blender 功能有差别,在查看教程时最好查看对应版本的教程。我使用的 Blender 版本为 4.0,较新,而中文网上信息较落后,甚至 Blender 官方中文文档也会出现错误。因此,我建议在学习时主要参考英文文档和视频教程,并灵活利用中文 QQ 群或 stackoverflow 等社区。
在学习建人物之前,建议先通过阅读文档和视频熟悉 Blender 的基础操作和功能,以及了解大致建模工作流程。雕刻建模与多边形建模不同,对新手来说应该先熟悉多边形建模。
建模包括白模、材质、纹理、着色器、骨骼、光照等等。我们并不是要在 Blender 中做动画,而是需要导出模型到其他地方,比如 VRChat 所用的 Unity 中。在游戏引擎中,有不同的环境、光照和适用于模型的着色器。因此,我们在 Blender 中主要需要做的是:制作白模、纹理绘制、绑定骨骼与权重和形状键。
三视图
正如画画需要参考图,建模也需要参考图。这里注意,建模所需的三视图和概念图不同。三视图是指模型的正、侧、顶正交视图,对应建模时的三个正交摄像机视角。这要求模型对应位置在视图中的投影平行,比如正视图与侧视图的肩处于同一高度,否则无法从三视图得到模型。
三视图建人物模型时一般是 T-pose。这便于建模和骨骼绑定。在导入模型到 Unity 时,也要求模型为 T-pose。
我的模型比较简单,因此我自己画了三视图。
VRChat
VRChat 基于 Unity 引擎,并且有官方引擎 SDK。若要导入模型到 VRChat,除了需要在 Unity 中制作 avatar,还需要先做一些准备工作:
- 你的账号需要摆脱访客身份才可以上传自己的模型。在游戏中活跃一段时间后,可以自动成为正式会员。
- 中国地区上传模型时会被墙,需要使用全局国外代理。
之后按照官方教程设置模型、着色器、形状键。
制作模型
3D 模型制作过程很难用文字描述,具体需要参考视频教程。建议跟随入门教程掌握了基本操作之后,再找一个专业的系列教程跟随操作。我看的教程主要是 VRChat 官方推荐的,其内容十分详细,包括低模、精细化、材质、骨骼、权重、形状键、上传 VRChat、导出 Vtuber 模型、加衣服等。
我不是专业的,因此并没有详细的技术细节,只简单记录我工作的大致流程和遇到的问题。基本上,跟着视频教程做,遇到问题 Google 一下、问社区、问 AI,基本没什么问题。
作为自学了一点的初学者,我对建模的感觉就像雕塑,需要耐心和经验;作为数学系的学生,我对建模的体会就像解决最优化问题,需要权衡质量和效率,这会在之后的工作中体现出来。(好的部分是,作为新手的我们还没有到需要卡常数的那一步)
白模
先建低模再细分细化。头部比较精细,与身体分开制作。头部可与身体连接或分开。如果要连接,注意接合处上下的布线一致。
- 头部:根据三视图由点到线然后到面进行拟合,注意布线满足之后缝合线的需求。眼睛部分做圆盘与身体分开。头发可用贝塞尔曲线制作,略复杂。
- 身体:挤出圆柱拟合身形即可。手部略精细需要单独做。注意手肘等关节处适合绑定骨骼的布线。
注意以下影响模型质量的因素:
- 优化面数,减小渲染压力;
- 减少三角形,渲染得更平滑,方便布线;
- 不用多边形(五边及以上),防止不同模型文件格式转换时出现问题。
可以看到,我们需要解决面数和模型细节的最优化问题。优化你的布线,让复杂的地方精细起来,简单(或者不常看见)的地方面数少一点。
UV 贴图
UV 展开是将模型的三维信息转化为二维图像。在 Blender 中,我们在 UV 编辑器中展开模型表面。展开后的 UV 贴图可以用来制作纹理。UV 的意思是表示二维的两个坐标轴。
简单来说,其实就是将物体的表面剪开,然后平摊到平面上。这个表面是有弹性的,可以适当拉伸和缩放。要回到三维,就是将展开图重新缝合起来,因此 UV 连接的地方叫做缝合线。如果你玩过 Minecraft,知道材质或皮肤文件是什么样,那其实就是纹理贴图,从二维到三维的映射即为 UV。
虽然可以拉伸,但我们还是希望所有地方(尤其是细节多的地方)的高斯曲率越小越好。可以预想,如果我们不加限制地地加缝合线,我们总可以将 UV 贴图的高斯曲率降得无限低。不幸的是,就像缝纫一样,缝合线并不是越多越好,缝合处可能导致渲染过渡不平滑等问题。因此,我们不仅要尽可能减少缝合线,还需要将缝合线隐藏在不引人瞩目或锐利的地方。这是需要解决的另一个最优化问题。
- 如果你想用 Photoshop 制作 UV 贴图,可能需要注意每一部分的 UV 整体一致。
- UV 其实可以重叠,重叠部分会读取相同的纹理,可以节省空间。比如眼睛正反面的 UV 可以正交投影到平行于眼睛的平面。
纹理绘制
材质是模型表面颜色的表现形式。材质决定了模型的外观、质感、材质属性等。比如,金属度会影响光照反射。其中,纹理是材质的重要内容,它体现了物体的固有色。作为人物模型,纹理绘制是我们的重点。
在实际操作中,很多阴影、高光、凹凸等细节如果改模型和渲染会耗费很多资源,但其实这些细节人眼并不易察觉,且并不会随着环境改变太多。因此,在纹理绘制中,除了表现物体的固有色,还会将这些细节的直接呈现效果表现出来。
作为动漫人物模型,我们需要达到的是三渲二的效果。因此,我们需要再“着色”部分用节点将纹理图片直接映射到模型表面,以去除大部分环境和光照的影响。具体操作见视频教程。
节点是材质纹理和着色器风格化的关键步骤,三渲二的效果恰巧比较简单,因此我们略过。
以下是一些要点:
- 贴图大小一般为边长 2 的整数次幂的正方形,如 512、1024 等。我用的是 2048x2048。格式为 PNG。贴图文件是独立于模型文件的,请务必注意保存。
- Blender 有自带的纹理绘制工具,但功能比较简单。可以通过装插件实现包括图层在内的复杂功能。如果你仍然觉得工具不够用,可以尝试使用 Photoshop 等软件绘制纹理(因为贴图文件是独立的),此时你就会注意到 UV 展开每个部分整体性的重要性。
- 纹理绘制时需要留出足够的出血,使其覆盖 UV 范围,否则边缘容易出现错误。
骨骼与权重
现在你有了一个很自信地站着的人物,但是却死气沉沉的,看着像加载出错的样子。我们得让它动起来。
模型要靠骨骼才能动起来。骨骼的结构类似一颗有根树,每一根骨头有其父节点(骨头),祖先骨头的移动会连带子骨头一起移动,这意味着每个骨头的位置和角度信息其实是相对于其父骨头的。这很符合常理:你保持头与脊柱平行,弯下腰,头会随着身体一起向下移动,而不是停留在原地(哈哈)。如果你的头真的停留在原地,那么说明你的骨骼没绑定好或者更可能是权重没刷好。
权重是什么?权重其实是一个统称,在这里特指骨骼权重。注意,我们是看不见骨骼的,我们能看到的、我们的目的是网格的移动。网格是跟随骨骼移动的,你可以将骨头看做它附近网格的父亲,我们将网格的移动依附在骨头上,这样,我们只需要控制骨头就可以控制其附近网格进行相同的位移旋转。那么具体这个骨头控制网格的哪些节点、控制多少呢?这就需要给网格赋予权重了。
选择一个骨头,在权重模式中给你希望它控制的网格刷上权重。刷的越多,骨头的移动对节点移动的影响越大。注意,一个节点的在各个骨头上的权重之和应该是 100%,否则它将部分保持绝对坐标。具体操作中,你可以给人物摆出一些很夸张的动作,以检查权重是否正确。
如果你之后想添加衣物,衣物同样需要绘制权重绑定到骨骼上。
形状键
骨骼方便其他程序比如游戏控制我们的人物肢体,然而我们仍然需要一些细节的固定动作。比如做表情时,人物的五官会有不同的位移,这时骨骼就不太好用了。这些比较固定的动作可以用形状键来实现。
形状键使用方法也十分简单。创建一个形状键,然后将网格各个节点移动为你想要的形状,保存即可。由于形状键是平滑过渡的,你甚至可以控制权重为中间过程。结合多种形状键,可以创造出多个组合动作。事实上,Blender Cats 插件给出不同音的唇形就是依靠这种方法:只需给出 AH OH CH 三个音的唇形就可以组合出几乎所有发音的唇形。你也可以利用这一点来做出新的表情。
制作动漫人物可能会需要一些表情贴图,直接做即可,平时缩小隐藏在头内部,使用形状键时放大调出来即可。
至此,制作模型的基本流程全部完成。可导出为各种不同格式。
导入 Unity
Unity 是 VRChat 所用的游戏引擎,我们需要将模型导入 Unity 中。
待更新。